﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.Serialization;
using System.Text;
using System.Windows.Forms;

namespace MikroMagazaObject
{

    public enum TeraziTip
    {
        ishida = 0,
        cas = 1,
        DigiSM300 = 2,
        CASLP500 = 3
    }

    public enum CalismaTipi
    {
        Servis = 0,
        Dosya = 1
    }
    public enum KasaTipi
    {
        NCR = 0,
        Genius = 1,
        Inter = 2
    }

    public enum Gunler
    {
        Pazartesi = 1,
        Salı = 2,
        Çarşamba = 3,
        Perşembe = 4,
        Cuma = 5,
        Cumartesi = 6,
        Pazar = 7
    }

    public enum ProgramTipleri
    {
        MikroV10 = 0,
        MikroV12 = 1,
        MikroV14 = 2,
        MikroV15 = 3
    }

    public class Settings
    {
        private static SettingsObject _instance;
        public static SettingsObject Get
        {
            get
            {
                if (_instance == null)
                {
                    if (File.Exists(Application.StartupPath + "\\settings.bin"))
                    {
                        byte[] data = File.ReadAllBytes(Application.StartupPath + "\\settings.bin");
                        _instance = Functions.DeSerialize(data);
                    }
                    else
                        _instance = new SettingsObject();
                }
                return _instance;
            }
        }
        public static void SaveSettings()
        {
            if (_instance != null)
            {
                byte[] data = Functions.Serialize(_instance);
                File.WriteAllBytes(Application.StartupPath + "\\settings.bin", data);
            }
        }
    }

    [Serializable()]
    public class EtiketSettingsObject
    {
        public string Adi { get; set; }
        public string Ean13 { get; set; }
        public string Ean8 { get; set; }
        public string Printer { get; set; }

        public EtiketSettingsObject() { }
        public EtiketSettingsObject(SerializationInfo info, StreamingContext ctxt)
        {
            Adi = (string)info.GetValue("Adi", typeof(string));
            Ean13 = (string)info.GetValue("Ean13", typeof(string));
            Ean8 = (string)info.GetValue("Ean8", typeof(string));
            Printer = (string)info.GetValue("Printer", typeof(string));
        }
        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("Adi", this.Adi);
            info.AddValue("Ean13", this.Ean13);
            info.AddValue("Ean8", this.Ean8);
            info.AddValue("Printer", this.Printer);
        }
    }

    [Serializable()]
    public class SettingsObject : ISerializable
    {
        public string Sql_Server { get; set; }
        public string Database_Name { get; set; }
        public string Merkez_Depo_Kodu { get; set; }
        public string Firma_Kod { get; set; }
        public string Donem_Kod { get; set; }
        public string Depo_Kod { get; set; }
        public string Servis_Url { get; set; }
        public string Yazici_Yolu { get; set; }
        public string Terazi_Yolu { get; set; }
        public string Kasa_yolu { get; set; }
        public int Etiket_Miktari { get; set; }
        public KasaTipi Kasa_Tipi { get; set; }
        public bool Pasif_Stok_Aktarilsin { get; set; }
        public string Opa_Yol { get; set; }
        public string Kasa_Kod { get; set; }
        public string Uzak_kasa_yol { get; set; }
        public string SatisDosyaAdi { get; set; }
        public string SatisDepoKod { get; set; }
        public string HalkDepoKod { get; set; }
        public string HalkGunu { get; set; }
        public ProgramTipleri ProgramTipi { get; set; }
        public CalismaTipi CalismaSekli { get; set; }
        public string ImportsFile { get; set; }
        public TeraziTip TeraziTipi { get; set; }
        public string otoSendTime { get; set; }
        public string KdvSiralamasi { get; set; }
        public string fiyatGruplari { get; set; }

        List<EtiketSettingsObject> _etiketler = new List<EtiketSettingsObject>();
        public List<EtiketSettingsObject> EtiketAyarlari { get { return _etiketler; } set { _etiketler = value; } }

        public SettingsObject() { }
        public SettingsObject(SerializationInfo info, StreamingContext ctxt)
        {
            EtiketAyarlari = (List<EtiketSettingsObject>)info.GetValue("EtiketAyarlari", typeof(List<EtiketSettingsObject>));

            Sql_Server = (string)info.GetValue("Sql_Server", typeof(string));
            Database_Name = (string)info.GetValue("Database_Name", typeof(string));
            Merkez_Depo_Kodu = (string)info.GetValue("Merkez_Depo_Kodu", typeof(string));
            Firma_Kod = (string)info.GetValue("Firma_Kod", typeof(string));
            Donem_Kod = (string)info.GetValue("Donem_Kod", typeof(string));
            Depo_Kod = (string)info.GetValue("Depo_Kod", typeof(string));
            Servis_Url = (string)info.GetValue("Servis_Url", typeof(string));
            Etiket_Miktari = (int)info.GetValue("Etiket_Miktari", typeof(int));
            Yazici_Yolu = (string)info.GetValue("Yazici_Yolu", typeof(string));
            Terazi_Yolu = (string)info.GetValue("Terazi_Yolu", typeof(string));
            Kasa_yolu = (string)info.GetValue("Kasa_yolu", typeof(string));
            Kasa_Tipi = (KasaTipi)info.GetValue("Kasa_Tipi", typeof(KasaTipi));
            Pasif_Stok_Aktarilsin = (bool)info.GetValue("Pasif_Stok_Aktarilsin", typeof(bool));
            Opa_Yol = (string)info.GetValue("Opa_Yol", typeof(string));
            Kasa_Kod = (string)info.GetValue("Kasa_Kod", typeof(string));
            Uzak_kasa_yol = (string)info.GetValue("Uzak_kasa_yol", typeof(string));
            SatisDosyaAdi = (string)info.GetValue("SatisDosyaAdi", typeof(string));
            SatisDepoKod = (string)info.GetValue("SatisDepoKod", typeof(string));
            HalkDepoKod = (string)info.GetValue("HalkDepoKod", typeof(string));
            HalkGunu = (string)info.GetValue("HalkGunu", typeof(string));
            ProgramTipi = (ProgramTipleri)info.GetValue("ProgramTipi", typeof(ProgramTipleri));
            CalismaSekli = (CalismaTipi)info.GetValue("CalismaSekli", typeof(CalismaTipi));
            ImportsFile = (string)info.GetValue("ImportsFile", typeof(string));
            TeraziTipi = (TeraziTip)info.GetValue("TeraziTipi", typeof(TeraziTip));
            otoSendTime = (string)info.GetValue("otoSendTime", typeof(string));
            KdvSiralamasi = (string)info.GetValue("KdvSiralamasi", typeof(string));
            fiyatGruplari = (string)info.GetValue("fiyatGruplari", typeof(string));
        }

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("Servis_Url", this.Servis_Url);
            info.AddValue("EtiketAyarlari", this.EtiketAyarlari);
            info.AddValue("Sql_Server", this.Sql_Server);
            info.AddValue("Database_Name", this.Database_Name);
            info.AddValue("Merkez_Depo_Kodu", this.Merkez_Depo_Kodu);
            info.AddValue("Firma_Kod", this.Firma_Kod);
            info.AddValue("Donem_Kod", this.Donem_Kod);
            info.AddValue("Depo_Kod", this.Depo_Kod);
            info.AddValue("Etiket_Miktari", this.Etiket_Miktari);
            info.AddValue("Terazi_Yolu", this.Terazi_Yolu);
            info.AddValue("Yazici_Yolu", this.Yazici_Yolu);
            info.AddValue("Kasa_yolu", this.Kasa_yolu);
            info.AddValue("Kasa_Tipi", this.Kasa_Tipi);
            info.AddValue("Pasif_Stok_Aktarilsin", this.Pasif_Stok_Aktarilsin);
            info.AddValue("Opa_Yol", this.Opa_Yol);
            info.AddValue("Kasa_Kod", this.Kasa_Kod);
            info.AddValue("Uzak_kasa_yol", this.Uzak_kasa_yol);
            info.AddValue("SatisDosyaAdi", this.SatisDosyaAdi);
            info.AddValue("SatisDepoKod", this.SatisDepoKod);
            info.AddValue("HalkDepoKod", this.HalkDepoKod);
            info.AddValue("HalkGunu", this.HalkGunu);
            info.AddValue("ProgramTipi", this.ProgramTipi);
            info.AddValue("CalismaSekli", this.CalismaSekli);
            info.AddValue("ImportsFile", this.ImportsFile);
            info.AddValue("TeraziTipi", this.TeraziTipi);
            info.AddValue("otoSendTime", this.otoSendTime);
            info.AddValue("KdvSiralamasi", this.KdvSiralamasi);
            info.AddValue("fiyatGruplari", this.fiyatGruplari);
        }
    }
}
